Код:
var Imported = Imported || {};
Imported.DKR_PastMessagesViewer = true;
var DKR = DKR || {};
DKR.PastMessagesViewer = DKR.PastMessagesViewer || {};
DKR.PastMessagesViewer.version = 1.0;
//----------------------------------------------------------------------------
/*:
* @plugindesc (v.1.0.0) Плагин предназначен для сохранения Сообщений и
* последующего их отображения - как отдельными окнами, так и общим текстом.
*
* @target MZ
* @author DarchanKaen
*
* @help
* DKR PastMessagesViewer
* ----------------------------------------------------------------------------
* ---Общая информация:
* @help Плагин предназначен для сохранения Сообщений и
* последующего их отображения - как отдельными окнами,
* так и общим текстом (для Прокрутки текста).
* Для корректной работы доступности Сообщений, используется переменная,
* хранящая список Сообщений (по-умолчанию №8).
* Для включения / отключения записи - используется соотв-я команда Скрипта!
* ---Команды(в эвенте команда "Скрипт"):
* DKR.PastMessagesViewer.saveMessagesToPast(isSave); - включить / выключить запись Сообщений; по-умолчанию отключена!.
* DKR.PastMessagesViewer.getPastMessagesCount(); - получить кол-во записанных Сообщений.
* DKR.PastMessagesViewer.setPastMessagesToVar(varId, name); - записать в указанную переменную текста ВСЕХ Сообщений, или с заданным именем.
* DKR.PastMessagesViewer.showPastMessage(pastMessageId); - показать окно конкретного Сообщения.
* DKR.PastMessagesViewer.clear(); - очистить список Сообщений.
* где:
* isSave - true (нужно записывать Сообщений) или false (не нужно записывать Сообщения).
* varId - номер переменной, в которую вывести текста и имя всех сообщений.
* name - имя говорящего, если интересую Сообщений только одного Персонажа.
* Можно не указывать, тогда выводятся все записанные Сообщения.
* pastMessageId - номер, по-порядку, конкретного сообщения; начинается с 1 и выводится окном.
* ----------------------------------------------------------------------------
*
* @param toSavePastMessagesVarId
* @type variable
* @desc Номер переменной для сохранения списка Сообщений
* @default 8
*
* @param nameEndSymbol
* @type text
* @desc Символ, следующий после имени
* @default :
*
* @param textEndSymbols
* @type text
* @desc Символ, разделающий сообщения
* @default ~~~
*
*/
(() => {
//--------DATA
const params = PluginManager.parameters('DKR_PastMessagesViewer');
const NAME_END_MARK = params['nameEndSymbol'] || ':';
const TEXT_END_MARK = params['textEndSymbols'] || '~~~';
const PAST_MESSAGES_LIST_VAR_ID = Number(params['toSavePastMessagesVarId']) || 8;
let isSaveMessagesToPast = false;
let messageNumber = 0;
let currentText = '';
//--------LOGIC
const setPastMessagesInVar = (varId, targetName = 'NONE') => {
let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
let pastMessagesList = messagesUnitedList;
let messagesStr = '';
if('NONE' !== targetName){
if(targetName.length >= 1){
pastMessagesList = messagesUnitedList.filter( pastMessage => targetName === pastMessage.mParams[4]);
}else{
console.log('DKR.PastMessagesViewer_ERROR: pastMessageName length~' + targetName + '~ is less than 1 symbol!');
}
}
for(let n = 0; n < pastMessagesList.length; n++){
let currentMessageData = pastMessagesList[n];
let currentMessageName = currentMessageData.mParams[4] + NAME_END_MARK + '\n';
let currentMessageText = currentMessageData.mText;
if(currentMessageName.length <= 2){
currentMessageName = '';
}
let currentMessageNamedText = currentMessageName + currentMessageText + TEXT_END_MARK;
messagesStr += currentMessageNamedText + '\n';
}
$gameVariables.setValue(varId, messagesStr);
}
const showPastMessageByIndex = (pastMessageId) => {
let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
pastMessageId -= 1;
if(pastMessageId < 0){
console.log('DKR.PastMessagesViewer_ERROR: pastMessageId~' + pastMessageId + '~ is less than zero!');
return;
}else if(pastMessageId >= messagesUnitedList.length){
console.log('DKR.PastMessagesViewer_ERROR: pastMessageId~' + pastMessageId + '~ is greater than past messages count!');
return;
}
let pastMessageData = messagesUnitedList[pastMessageId];
let pastMessageParams = pastMessageData.mParams;
let pastMessageText = pastMessageData.mText;
showMessage(pastMessageParams, pastMessageText);
}
const showMessage = (params, text) => {
$gameMessage.setFaceImage(params[0], params[1]);
$gameMessage.setBackground(params[2]);
$gameMessage.setPositionType(params[3]);
$gameMessage.setSpeakerName(params[4]);
$gameMessage.add(text);
}
const getPastMessagesLength = () => {
let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
return messagesUnitedList.length;
}
//--------CHANGED CORE (ALIASES)
DKR_ScrollableMessages_Game_Message_add = Game_Message.prototype.add;
Game_Message.prototype.add = function(text) {
DKR_ScrollableMessages_Game_Message_add.call(this, text);
if(true === isSaveMessagesToPast){
currentText += text + '\n';
}
};
DKR_ScrollableMessages_Game_Interpreter_command101 = Game_Interpreter.prototype.command101;
Game_Interpreter.prototype.command101 = function(params) {
DKR_ScrollableMessages_Game_Interpreter_command101.call(this, params);
if(true === isSaveMessagesToPast){
let currentMessageData = { mNumber:messageNumber, mParams:params, mText:currentText };
let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
messagesUnitedList.push(currentMessageData);
$gameVariables.setValue(PAST_MESSAGES_LIST_VAR_ID, messagesUnitedList);
currentText = '';
messageNumber++;
}
}
//--------COMMANDS
DKR.PastMessagesViewer.saveMessagesToPast = function(isSave){
isSaveMessagesToPast = isSave;
}
DKR.PastMessagesViewer.getPastMessagesCount = function(){
let pastMessagesCount = getPastMessagesLength();
return pastMessagesCount;
}
DKR.PastMessagesViewer.setPastMessagesToVar = function(varId, name){
setPastMessagesInVar(varId, name);
}
DKR.PastMessagesViewer.showPastMessage = function(pastMessageId){
showPastMessageByIndex(pastMessageId);
}
DKR.PastMessagesViewer.clear = function(){
messagesUnitedList = [];
$gameVariables.setValue(PAST_MESSAGES_LIST_VAR_ID, messagesUnitedList);
currentText = '';
messageNumber = 0;
}
})();
Социальные закладки